package edu.corn.job.core.engine.persistent;

import edu.corn.job.core.context.JobRunningContext;

import java.util.List;
import java.util.function.Predicate;

/**
 * job持久化接口。
 * 需要保存什么信息呢？job执行进度，需要对job进行什么程度的持久化呢？
 * 单单只保存JobRunningContext行不行呢？
 */
public interface JobPersistent {

    /**
     * 该方法能够保存一个context至resource中。
     *
     * @param context 上下文。
     * @return 是否成功。
     */
    Boolean save(JobRunningContext context);

    /**
     * batchSave
     *
     * @param contextList 上下文列表。
     * @return 是否成功。
     */
    Boolean saveAll(List<JobRunningContext> contextList);

    /**
     * 删除持久化的context。
     *
     * @param context 上下文。
     * @return 是否成功。
     */
    boolean delete(JobRunningContext context);

    /**
     * 该方法获取所有JobContext。
     *
     * @return 上下文列表。
     */
    List<JobRunningContext> loadAll();


    /**
     * 返回符合规则的context。
     *
     * @param filter 用于判断是否是想要的上下文。
     * @return 上下文列表。
     */
    List<JobRunningContext> load(Predicate<JobRunningContext> filter);

    /**
     * 根据id返回一个context。
     *
     * @param id 上下文存储的id。
     * @return 上下文。
     */
    JobRunningContext loadOne(String id);

}
